package br.com.fip.sis.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import br.com.fip.sis.model.Funcionario;
import br.com.fip.sis.util.Log;

public class FuncionarioDAO {

	public FuncionarioDAO() {

	}

	private Session session;

	public void inserirFuncionario(Funcionario funcionario, Session session) {
		this.session = session;
		try {
			this.session.beginTransaction();
			this.session.save(funcionario);
			this.session.getTransaction().commit();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}
	}

	public void alterarFuncionario(Funcionario funcionario, Session session) {
		this.session = session;
		try {
			this.session.beginTransaction();
			this.session.merge(funcionario);
			this.session.getTransaction().commit();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}
	}

	public void excluirFuncionario(Funcionario funcionario, Session session) {
		this.session = session;
		try {
			this.session.beginTransaction();
			this.session.delete(funcionario);
			this.session.getTransaction().commit();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}
	}

	@SuppressWarnings("unchecked")
	public List<Funcionario> listarFuncionarios(Session session) {
		this.session = session;
		try {
			Criteria criteria = this.session.createCriteria(Funcionario.class);
			return criteria.list();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}

		return null;
	}

	@SuppressWarnings("unchecked")
	public List<Funcionario> buscarPorNome(String nome, Session session) {
		this.session = session;
		try {
			Criteria criteria = this.session.createCriteria(Funcionario.class);
			criteria.add(Restrictions.eq("nome", nome));
			return criteria.list();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}

		return null;
	}

	public Funcionario buscarFuncionarioID(long id, Session session) {
		Funcionario funcionario = new Funcionario();
		this.session = session;
		try {
			Criteria criteria = this.session.createCriteria(Funcionario.class);
			criteria.add(Restrictions.eq("id", id));
			funcionario = (Funcionario) criteria.uniqueResult();
			return funcionario;
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}

		return null;
	}

	public Funcionario logarFuncionario(String login, String senha,
			Session session) {
		Funcionario funcionario = null;
		this.session = session;
		try {
			Criteria criteria = this.session.createCriteria(Funcionario.class);
			criteria.add(Restrictions.eq("login", login));
			funcionario = (Funcionario) criteria.uniqueResult();

			if (funcionario.getSenha().equals(senha))
				return funcionario;
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			Log.getLogger().error(e);
		}

		return null;
	}

}
